home *** CD-ROM | disk | FTP | other *** search
- #include <mem.h>
-
- typedef unsigned real[3];
-
- struct d_b { /*structure of a double (bits parsed for transferring
- data from a pascal real */
- unsigned int mant7 : 13; /*least signif. part of the mantissa*/
- unsigned int mant6 : 3;
- unsigned int mant5 : 13;
- unsigned int mant4 : 3;
- unsigned int mant3 :13;
- unsigned int mant2 : 3;
- unsigned int mant1 : 4; /*most signif. part of the mantissa*/
- unsigned int exp : 11;
- unsigned int sign : 1;
- };
-
- struct r_i { /*structure of a real (bits parsed for transferring
- data to a double */
- unsigned int exp : 8;
- unsigned int mant6 : 3;
- unsigned int mant5 :13;
- unsigned int mant4 : 3;
- unsigned int mant3 :13;
- unsigned int mant2 : 3;
- unsigned int mant1 : 4; /*most significant part of mantissa*/
- unsigned int sign : 1;
- };
-
- union r_i_o { /*pascal real number input to inp*/
- real inp; /*parsed bits transferred out as xfr */
- struct r_i xfr;
- };
-
- union d_i_o { /*bits transferred in to inp*/
- struct d_b inp; /*double read out as outp*/
- double outp;
- };
-
- double real_double(real real_no)
- {
- union r_i_o r;
- union d_i_o d;
- int i;
- for (i=0;i<3;i++) r.inp[i]=real_no[i];/*move real_no into transfer */
- /* structure */
- d.inp.exp = r.xfr.exp + 894; /*transfer data from pascal */
- d.inp.sign = r.xfr.sign ; /* structure to double */
- d.inp.mant1= r.xfr.mant1; /* structure */
- d.inp.mant2= r.xfr.mant2;
- d.inp.mant3= r.xfr.mant3;
- d.inp.mant4= r.xfr.mant4;
- d.inp.mant5= r.xfr.mant5;
- d.inp.mant6= r.xfr.mant6;
- d.inp.mant7= 0;
- return d.outp; /*return result from double*/
- /*structure*/
- }
-
-
- void double_real(real *real_no,double doub_no)
- {
- union r_i_o r;
- union d_i_o d;
- int i;
-
- d.outp=doub_no;
- r.xfr.exp = d.inp.exp-894;
- r.xfr.sign = d.inp.sign;
- r.xfr.mant1 = d.inp.mant1;
- r.xfr.mant2 = d.inp.mant2;
- r.xfr.mant3 = d.inp.mant3;
- r.xfr.mant4 = d.inp.mant4;
- r.xfr.mant5 = d.inp.mant5;
- r.xfr.mant6 = d.inp.mant6;
-
- memcpy(*real_no,r.inp,sizeof(real));
- }
-